package com.eco.fanliapp.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;

public class BigDecimalUtils {

    /**
     * 提供精确的加法运算。
     *
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    public static BigDecimal add(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(v1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(v2));
        return b1.add(b2).setScale(2, BigDecimal.ROUND_DOWN);
    }

    /**
     * 提供精确的减法运算。
     *
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    public static BigDecimal sub(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(v1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(v2));
        return b1.subtract(b2).setScale(2, BigDecimal.ROUND_DOWN);
    }

    /**
     * 提供精确的乘法运算。
     *
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    public static BigDecimal mul(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(v1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(v2));
        return b1.multiply(b2).setScale(2, BigDecimal.ROUND_DOWN);
    }


    /**
     * 提供精确的乘法运算。
     *
     * @param v1 被除数 分母
     * @param v2 除数  因子
     * @return 两个参数的积
     */
    public static BigDecimal div(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(v1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(v2));
        BigDecimal bigDecimal = new BigDecimal("0");
        if (b2.compareTo(bigDecimal) == 0) {
            return bigDecimal;
        }
        return b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 返后价计算
     *
     * @param str  券后价
     * @param str2 佣金
     * @return
     */
    public static BigDecimal fanlihoMoney(String str, BigDecimal str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        return s.subtract(str2);
    }

    /**
     * 佣金计算规则
     *
     * @param str  用户分佣比例
     * @param str2 佣金金额
     * @return 佣金取两位小数,舍去
     */
    public static BigDecimal FanliMoney(String str, BigDecimal str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        return s.divide(BigDecimal.valueOf(Double.valueOf(100))).multiply(str2).setScale(2, BigDecimal.ROUND_DOWN);
    }
    //setScale(1)
    /**
     * 佣金计算规则
     *
     * @param str  用户分佣比例
     * @param str2 佣金金额
     * @return 佣金取两位小数,四舍五入
     */
    public static BigDecimal FanliMoneyScale(String str, BigDecimal str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        return s.divide(BigDecimal.valueOf(Double.valueOf(100))).multiply(str2).setScale(2,BigDecimal.ROUND_HALF_UP);
    }
    /**
     * 淘宝佣金计算规则适用于超级搜索除以10000返回的用金比例为1550
     *
     * @param str  分佣比例
     * @param str2 折后价
     * @return
     */
    public static BigDecimal TaoBaoCommissionSum(String str, String str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        BigDecimal s2 = BigDecimal.valueOf(Double.valueOf(str2));
        return s.divide(BigDecimal.valueOf(Double.valueOf(10000))).multiply(s2).setScale(2, BigDecimal.ROUND_DOWN);
    }
    /**
     * 淘宝佣金计算规则适用于超级搜索除以10000返回的用金比例为1550
     *
     * @param str  分佣比例
     * @param str2 折后价  四舍五入
     * @return
     */
    public static BigDecimal TaoBaoCommissionSumScale(String str, String str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        BigDecimal s2 = BigDecimal.valueOf(Double.valueOf(str2));
        return s.divide(BigDecimal.valueOf(Double.valueOf(10000))).multiply(s2).setScale(2,BigDecimal.ROUND_HALF_UP);
    }
    /**
     * 淘宝佣金计算规则
     *
     * @param str  分佣比例不用除以百分比
     * @param str2 折后价
     * @return
     */
    public static BigDecimal TaoBaoCommissionSum2(String str, String str2) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        BigDecimal s2 = BigDecimal.valueOf(Double.valueOf(str2));
        return s.multiply(s2).setScale(2, BigDecimal.ROUND_DOWN);
    }

    /**
     * 对参数进行格式化 保留两位小数后面的直接舍去
     *
     * @param str
     * @return
     */
    public static BigDecimal Format(String str) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        return s.setScale(2, BigDecimal.ROUND_DOWN);
    }

    public static BigDecimal Format(Double str) {
        BigDecimal s = BigDecimal.valueOf(str);
        return s.setScale(2, BigDecimal.ROUND_DOWN);
    }

    public static BigDecimal Format(BigDecimal str) {
        return str.setScale(2, BigDecimal.ROUND_DOWN);
    }

    public static BigDecimal Format(int str) {
        BigDecimal s = BigDecimal.valueOf(Double.valueOf(str));
        return s.setScale(2, BigDecimal.ROUND_DOWN);
    }

    public static String FormatNum(String num1, String num2) {
        BigDecimal a = BigDecimal.valueOf(Double.valueOf(num1));
        BigDecimal b = BigDecimal.valueOf(Double.valueOf(num2));
        a = a.multiply(new BigDecimal(100));
        BigDecimal result = a.divide(b, 0, RoundingMode.HALF_UP);
        if (result.compareTo(new BigDecimal(1)) < 1) {
            result = new BigDecimal(1);
        }
        return result + "";
    }

    public static void main(String[] args) {
        String str = "0.74";
        int str2 = 74;
        BigDecimal str3 = BigDecimal.valueOf(0.74);
        Double str4 = 0.74;

    }
}
